Load balancing (also referred herein to as server load balancing (SLB)) is a method of distributing workload across a number of devices (e.g., servers) in order to increase productivity. For example, multiple servers may be used to provide services for client nodes, such as computers, mobile phones, etc, in a network. Current implementations of SLB generally fall into 2 main categories: stateful and stateless. Stateful implementations may track and record state (e.g., protocols, ports, addresses, time of day, sequence numbers, packet sizes, duration of flow, etc.) about each network flow (e.g., a stream of related packets) and, as such, can provide the most accurate, granular, and feature-rich load balancing schemes. In particular, stateful implementations may provide content filtering and content aware switching. For example, a stateful load balancer may block certain flows (e.g., based on protocol identifiers or port numbers) from being load balanced and a stateful load balancer may recognize certain events (e.g., a session is established, a timeout has occurred, a session has ended, etc.) or may recognize content (e.g., files being transferred) in flows and, using this state information, may perform appropriate actions (e.g., locking a flow to a particular server for a given application, session, or service). While stateful implementations can provide various features, stateful implementations are generally resource expensive and can suffer from scalability and performance issues.
In contrast, stateless implementations generally are resource inexpensive. Stateless implementations typically distribute traffic using packet-based hashing without storing state or information about each network flow. For example, packet field information (e.g., source Internet protocol (IP) address and destination IP address) may be inputted into a hash scheme for determining which server receives each packet. Since hash values are generally resource inexpensive to compute, these stateless implementations are generally faster and easier to implement. While stateless implementations can provide better performance (e.g., greater packet throughput) than stateful implementations, stateless implementations lack features and have limitations. For example, stateless implementations may lack cookie or session awareness. Additionally, flow persistency in stateless implementations may be generally less reliable. That is, stateless implementations may be generally less consistent in distributing packets of a network traffic flow to the same server. Further, conventional stateless load balancers require restrictive addressing schemes that can limit granularity in assigning load balancing workloads.
Accordingly, a need exists for improved methods, systems, and computer readable media for stateless load balancing of network traffic flows.